package com.deyuanyun.pic.settings.mapper.base;

import com.deyuanyun.pic.settings.controller.dto.BizMsgThresholdVO;
import com.deyuanyun.pic.settings.controller.dto.base.AcDcMiorRecordDTO;
import com.deyuanyun.pic.settings.controller.dto.base.DefectInfoDTO;
import com.deyuanyun.pic.settings.controller.dto.base.ExinspCptestStationDTO;
import com.deyuanyun.pic.settings.controller.dto.base.FeatureTypeDTO;
import com.deyuanyun.pic.settings.controller.dto.base.NewlyTaskDTO;
import com.deyuanyun.pic.settings.controller.dto.base.PigTaskDTO;
import com.deyuanyun.pic.settings.controller.dto.base.RepairTaskDTO;
import com.deyuanyun.pic.settings.controller.dto.base.RiskAssessmentDTO;
import com.deyuanyun.pic.settings.controller.dto.prvlg.RoleDTO;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;


/**
 *  自定义业务阀值设置mapper
 *  @author axiao(xj08.dream@gmail.com)
 *  @date 2016-06-23
 *  @version 1.0
 *  Histroy: [修改人][时间][描述]
 */
public interface CustomBizMsgThresholdMapper {

    /**
     * 查询所有角色列表
     * @return
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-06-23
     */
    List<RoleDTO> queryAllRole();

    /**
     * 根据统一编号查询风险评价信息
     * @param map: map参数说明
     *       <pre>codeList：统一编号集合
     *            riskGrade：风险等级对应的值
     *            areaLevel：地区等级对应的值
     *       </pre>
     * @return
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-06-23
     */
    public List<RiskAssessmentDTO> queryRiskAssessmentInfo(Map<String, Object> map);


    /**
     * 根据类型得到业务信息阀值集合数据
     * @param types 类型
     * @return
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-06-23
     */
    public List<BizMsgThresholdVO> queryDataByTypes(@Param("types") String ... types);

    /**
     * 据类型得到业务信息阀值数据
     * @param type
     * @return
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-06-27
     */
    public BizMsgThresholdVO queryDataByTypeOne(@Param("type") String type);

    /**
     * 根据类型查询该类型下的所有子节点,只负责页面显示
     * @param type 类型
     * @return
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-06-27
     */
    public List<BizMsgThresholdVO> queryChildForPage(@Param("type")String type);

    /**
     * 判断风险评价或者立即维修的缺陷消息是否已经推送，如果大于零视为已经推送过了
     * @param paramMap
     * <pre> key值说明：<br/>
     *     lastDate： 更新时间或者创建时间<br/>
     *     bizMsgThresholdId： 阀值id<br/>
     *     roleId： 角色id<br/>
     * </pre>
     * @return
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-06-28
     */
    public int countRiskDefectMsg(Map<String, Object> paramMap);

    /**
     * 判断管道周期是否已经推送，如果大于零视为已经推送过了
     * @param  paramMap key值说明：
     * <pre>
     * pushFlagStr：是否推送判断的关键字符串，由管道id+起点位置id+终点位置id+yyyyMMdd，组成<br/>
     * bizMsgThresholdId：阀值id<br/>
     * roleId：角色id
     * </pre>
     * @return
     */
    public int countPipeSchedule(Map<String, Object> paramMap);

    /**
     * 根据条件查询立即维修的管道
     * @param pipeLineId 管道id
     * @param beginMileage 起始绝对距离
     * @param endMileage 终止绝对距离
     * @return
     */
    public List<DefectInfoDTO> queryImmeRepairDefects(@Param("pipeLineId") String pipeLineId,
                                                           @Param("beginMileage") BigDecimal beginMileage,@Param("endMileage")  BigDecimal endMileage);

    /**
     * 统计对应管道管道下面每个缺陷的数量
     * @param pipeLineId 管道id
     * @param beginMileage 起始绝对距离
     * @param endMileage 终止绝对距离
     * @return
     */
    public List<FeatureTypeDTO> countFeatureType(@Param("pipeLineId") String pipeLineId,
                                                 @Param("beginMileage") BigDecimal beginMileage,@Param("endMileage")  BigDecimal endMileage);

    /**
     * 根据管道id、起始绝对距离、终止绝对距离相匹配的最新的两次检测任务
     * @param pipeLineId 管段id
     * @param fromPipeValveroomId 起始位置
     * @param toPipeValveroomId 终止位置
     * @return
     */
    public List<NewlyTaskDTO> queryNewlyTask(@Param("pipeLineId") String pipeLineId,
                                             @Param("fromPipeValveroomId") String fromPipeValveroomId,
                                             @Param("toPipeValveroomId") String toPipeValveroomId);

    /**
     * 根据管道id和检测任务id统计到金属损失数据
     * @param pipeLineId 管道id
     * @param taskId 检测任务id
     * @param type 为0是外部金属损失，为1是内部金属损失
     * @return
     */
    public NewlyTaskDTO queryMetalLoss(@Param("pipeLineId") String pipeLineId,
                                    @Param("taskId") String taskId, @Param("type") String type);

    /**
     * 根据缺陷评价任务id得到缺陷评价任务信息
     * @param taskId 缺陷评价任务id
     * @return
     */
    public Map<String, Object> findEvaluationTaskInfo(@Param("taskId") String taskId);

    /**
     * 得到维修项目名称
     * @param repairIds 维修项目id
     * @return
     */
    public List<RepairTaskDTO> queryRepairByIds(@Param("repairIds") String ... repairIds);

    /**
     * 根据缺陷id集合得到其中评价最迟维修时间最早的一条缺陷点信息
     * @param defectIds
     * @return
     */
    public DefectInfoDTO queryTheFirstDefect(@Param("defectIds") List<String> defectIds);

    /**
     * 根据检测任务id获取到具体的信息
     * @param taskId
     * @return
     */
    public PigTaskDTO findPigTaskById(@Param("taskId") String taskId);

    /**
     * 风险评价-----查询测试桩检测数据信息集合
     * @param pipeLineId 管道id
     * @param beginMileage 起点绝对距离
     * @param endMileage 终点绝对距离
     * @return
     */
    public List<ExinspCptestStationDTO> queryRiskExinspCptestStation(@Param("pipeLineId") String pipeLineId,
                                                               @Param("beginMileage") Long beginMileage, @Param("endMileage") Long endMileage);

    /**
     * 风险评价-----查询交流/直流干扰强度信息集合
     * @param pipeLineId 管道id
     * @param beginMileage 起点绝对距离
     * @param endMileage 终点绝对距离
     * @return
     */
    public List<AcDcMiorRecordDTO> queryRiskAcDcMiorInfo(@Param("pipeLineId") String pipeLineId, @Param("beginMileage") Long beginMileage,
                                                       @Param("endMileage") Long endMileage);

    /**
     * 根据父级id删除业务阀值表信息
     * @param parentId
     * @return
     */
    int deleteBizMsgByParentId(@Param("parentId") String parentId);

    /**
     * 根据父级id删除业务阀值系统设置表信息
     * @param parentId
     * @return
     */
    int deleteSysBizMsgByParentId(@Param("parentId") String parentId);

    /**
     * 根据角色id查询用户id
     * @param roleIds
     * @return
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-12-27
     */
    public Set<String> queryUseIdByRoleIds(@Param("roleIds") Collection<String> roleIds);

}

